import Vue from 'vue';
import store from '@/store/index';
import VueRouter from 'vue-router';
import Home from '@/views/home/index.vue';
import Login from '@/views/login/index.vue';
import Layout from '@/views/layout/index.vue';

Vue.use(VueRouter);

const routes = [
  // {
  //   path: '/',
  //   name: 'Home',
  //   component: Home
  // },
  {
    path: '/login',
    name: 'Login',
    component: Login
  },
  // 主页
  {
    path: '/',
    name: 'Layout',
    component: Layout,
    // 嵌套路由/二级路由
    // 把children组件放在layout组件的router-view位置
    children: [
      //  meta: { isKeepAlive: true } 需要缓存的组件，标记一下
      { path: '/', component: Home, meta: { isKeepAlive: true } },
      { path: '/user', component: () => import('@/views/user/index') },
      { path: '/video', component: () => import('@/views/video/index') },
      { path: '/question', component: () => import('@/views/question/index') }
    ]
  },
  // 路由懒加载:第一屏可以直接引入，不是第一屏的页面可以用路由懒加载
  {
    path: '/search',
    name: 'Search',
    component: () => import('@/views/search/index')
  },
  // 这个路由是打算以查询字符串的方式来传入查询关键字
  { path: '/search/result', component: () => import('@/views/search/result') },
  // 动态路由传入文章编号
  { path: '/article/:id', component: () => import('@/views/article/index') },
  { path: '/user/profile', component: () => import('@/views/user/profile') },
  { path: '/user/chat', component: () => import('@/views/user/chat') }
];

const router = new VueRouter({
  routes
});

// 路由守卫
// 路由变化时，在跳入目标路由页之前会执行这个函数
router.beforeEach(function (to, from, next) {
  console.log('路由守卫', to, from, next);
  // to: 到哪里去
  // from: 从哪里来
  // next: 是一个函数，用来自行定义路由的跳转

  // 如果要去的页面是以/user开头的，则进行身份验证
  // 当用户在访问http://localhost:8080/#/user时，如果它没有登陆，则让它回去登陆页，
  // 登陆成功之后，再回到这里
  if (to.path.startsWith('/user')) {
    console.log('store', store);
    if (store.state.tokenInfo.token) {
      // 验证通过，放行
      next();
    } else {
      // 验证不通过，跳回登录页
      next({
        path: '/login',
        query: {
          backto: to.fullPath
          // fullPath：包含查询字符串 /user?a=1&b=2
          // path： /user
        }
      });
    }
  } else {
    next();
  }
});

export default router;
